﻿using Microsoft.Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Framework.IOC
{
    public class IOCMiddleware : OwinMiddleware
    {
        /// <summary>
        /// 下一个“中间件”对象
        /// </summary>
        OwinMiddleware _next;
        string _path;
        /// <summary>
        /// 构造函数，第一个参数必须为 OwinMiddleware对象
        /// </summary>
        /// <param name="next">下一个中间件</param>
        public IOCMiddleware(OwinMiddleware next,string path)
            : base(next)
        {
            _next = next;
            //第一个参数是固定的，后边还可以添加自定义的其它参数
            _path = path;
        }
        
        /// <summary>
        /// 处理用户请求的具体方法，该方法是必须的
        /// </summary>
        /// <param name="c">OwinContext对象</param>
        /// <returns></returns>
        public override Task Invoke(IOwinContext context)
        {
            ServiceLocator.RegistAll(_path);
            return _next.Invoke(context);
        }
    }
}
